<?php
namespace app\api\service;

use app\api\service\delivery\PlatformFactory;
use think\exception\ValidateException;
use think\facade\Log;

class DeliveryService
{
    protected $platform;
    
    public function __construct($platformName = null)
    {
        $platformName = $platformName ?? config('delivery.default_platform');
        $this->platform = PlatformFactory::create($platformName);
    }
    
    // 查询城市
    public function openCitiesLists($params)
    {
        // 验证数据

        // 调用平台接口
        $result = $this->platform->openCitiesLists($params);

        // 验证必要返回字段
        $need_field=[["cityCode","cityName"]];//城市编码，城市名称
        $res=get_return_data($result, $need_field);

        return $res;
    }

    // 分页查询商户店铺
    public function queryAllStores($params)
    {
        // 调用平台接口
        $result = $this->platform->queryAllStores($params);

        // 验证必要返回字段
        $need_field=[["storeId","storeName","contactsMobile","cityName","address","addressDetail","latitude","longitude","status"]];//配送平台店铺编码，店铺名称,联系电话，城市名称，地址，详细地址，纬度,经度，店铺状态
        $res=get_return_data($result, $need_field);

        return $res;
    }

    // 查询城市可指定的交通工具
    public function optionalTravelWay($params)
    {
        // 调用平台接口
        $result = $this->platform->optionalTravelWay($params);

        // 验证必要返回字段
        $need_field=[["travelWay","desc"]];//交通工具值，交通工具描述
        $res=get_return_data($result, $need_field);

        return $res;
    }

    // 订单计费(预下单)
    public function orderCalculate($params)
    {
        // 调用平台接口
        $result = $this->platform->orderCalculate($params);

        // 验证必要返回字段
        $need_field=["totalDistance","totalWeight","sysNumber","totalAmount","couponSaveFee","totalFeeAfterSave"];
                    //  总距离(米)      总重量(kg)   骑手系统单号  订单总金额(分) 优惠的总额度(分) 实际支付的费用(分)
        $res=get_return_data($result, $need_field);

        return $result;
    }

    // 提交订单
    public function orderPlace($params)
    {

        // 调用平台接口
        $result = $this->platform->orderPlace($params);

        $result["data"]=[];

        return $result;
    }

    // 订单加价
    public function addition($params)
    {
     
        // 调用平台接口
        $result = $this->platform->addition($params);

        return $result;
    }

    //查询订单详情
    public function orderInfo($params){

        // 调用平台接口
        $result = $this->platform->orderInfo($params);

        // 验证必要返回字段
        $need_field=["orderStatus","orderStatusDesc","courier","totalAmount","couponSaveFee","totalFeeAfterSave"];
                    //  订单状态      订单状态描述      骑手信息   订单总金额(分) 优惠的总额度(分) 实际支付的费用(分)
        $res=get_return_data($result, $need_field);

        return $result;
    }

    //查询闪送员位置信息
    public function courierInfo($params){
        // 调用平台接口
        $result = $this->platform->courierInfo($params);

        return $result;
    }

    //查询订单续重加价金额
    public function calculateOrderAddWeightFee($params){
        // 调用平台接口
        $result = $this->platform->calculateOrderAddWeightFee($params);

        return $result;
    }

    //支付订单续重费用
    public function payAddWeightFee($params){
        // 调用平台接口
        $result = $this->platform->payAddWeightFee($params);

        return $result;
    }

    //订单预取消
    public function preAbortOrder($params){
        // 调用平台接口
        $result = $this->platform->preAbortOrder($params);

        return $result;
    }

    //订单取消
    public function abortOrder($params){
        // 调用平台接口
        $result = $this->platform->abortOrder($params);

        // 验证必要返回字段
        $need_field=["deductFee","sendBackFee"];//扣除费， 退回费
        $res=get_return_data($result, $need_field);

        return $res;
    }

    //确认物品送回
    public function confirmGoodsReturn($params){
        // 调用平台接口
        $result = $this->platform->confirmGoodsReturn($params);

        return $result;
    }

    //新增店铺/修改店铺
    public function storeOperation($params){

        //传入goodType说明： 1文件 3数码 5蛋糕 6餐饮 7鲜花 9汽配 10其他 12母婴 13医药健康 15商超 16水果

         
        // 转达达goodType
        // 1食品小吃 2饮料 3鲜花绿植 5其他 8文印票务 9便利店 13水果生鲜 19同城电商 20医药
        // 21蛋糕 24酒品 25小商品市场 26服装 27汽修零配 28数码家电 29小龙虾/烧烤 31超市 51火锅 53个护美妆
        // 55母婴 57家居家纺 59手机 61家装 63成人用品 65校园 66高端市场
        $dadaGoodsType=[1=>8,3=>28,5=>21,6=>1,7=>3,9=>27,10=>5,12=>55,13=>20,15=>31,16=>13];
        $params['business']=$dadaGoodsType[$params['goodType']];

        // 调用平台接口
        $result = $this->platform->storeOperation($params);

        // 验证必要返回字段
        $need_field=["storeId"];
        $res=get_return_data($result, $need_field);

        return $res;
    }

    //查询账号额度
    public function getUserAccount($params){
        // 调用平台接口
        $result = $this->platform->getUserAccount($params);

        // 验证必要返回字段
        $need_field=["balance"];
        $res=get_return_data($result, $need_field);

        return $res;
    }

    //订单状态回调
    public function statusNotify($params){
        // 调用平台接口
        $result = $this->platform->statusNotify($params);

        return $result;
    }

    //修改收件人手机号
    public function updateToMobile($params){
        // 调用平台接口
        $result = $this->platform->updateToMobile($params);

        return $result;
    }

    //批量新增店铺
    public function addStores($params){
        // 调用平台接口
        $result = $this->platform->addStores($params);

        return $result;
    }

    //查询订单ETA
    public function orderEta($params){
        // 调用平台接口
        $result = $this->platform->orderEta($params);

        return $result;
    }

    //订单追单
    public function appendOrder($params){
        // 调用平台接口
        $result = $this->platform->appendOrder($params);

        return $result;
    }

    //查询是否支持尊享送
    public function qualityDeliverySwitch($params){
        // 调用平台接口
        $result = $this->platform->qualityDeliverySwitch($params);

        return $result;
    }

    //查询尊享送达成状态
    public function qualityDeliveryStatus($params){
        // 调用平台接口
        $result = $this->platform->qualityDeliveryStatus($params);

        return $result;
    }





    //商户审核骑士取消订单
    public function merchantExamine(array $params){
        // 调用平台接口
        return $this->platform->merchantExamine(...func_get_args());
    }
    //获取骑士配送信息H5页面
    public function transporter(array $params){
        // 调用平台接口
        return $this->platform->transporter(...func_get_args());
    }
    //更新取件码和货架号
    public function fetchCode(array $params){
        // 调用平台接口
        return $this->platform->fetchCode(...func_get_args());
    }
    //商户确认售后单交接完成
    public function afterSale(array $params){
        // 调用平台接口
        return $this->platform->afterSale(...func_get_args());
    }
    //订单取消原因
    public function cancelReasons($params){
        // 调用平台接口
        $result=$this->platform->cancelReasons($params);

        return $result;
    }
    // 商家投诉
    public function complaint($params){
        // 调用平台接口
        $result=$this->platform->complaint($params);

        return $result;
    }
    //商家投诉原因
    public function complaintReasons($params){
        // 调用平台接口
        $result=$this->platform->complaintReasons($params);

        return $result;
    }

}